package com.xiaoshuidi.cloud.module.finance.service.finance;

import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.framework.security.core.LoginUser;
import com.xiaoshuidi.cloud.module.bpm.mq.message.BpmProcessInstanceResultEvent;
import com.xiaoshuidi.cloud.module.finance.controller.admin.finance.vo.account.*;
import com.xiaoshuidi.cloud.module.finance.controller.app.finance.vo.AppFinanceAccountWithdrawPageReqVO;
import com.xiaoshuidi.cloud.module.finance.controller.app.finance.vo.AppFinanceAccountWithdrawReqVO;
import com.xiaoshuidi.cloud.module.finance.controller.app.finance.vo.AppFinanceAccountWithdrawReviewReqVO;
import com.xiaoshuidi.cloud.module.finance.dal.dataobject.finance.FinanceAccountWithdrawDO;
import com.xiaoshuidi.cloud.module.finance.dal.dataobject.finance.FinanceAccountWithdrawExtDO;

import java.util.List;

public interface FinanceAccountWithdrawService {
    void withdraw(LoginUser user, AppFinanceAccountWithdrawReqVO reqVO);

    PageResult<FinanceAccountWithdrawDO> withdrawPage(LoginUser user, AppFinanceAccountWithdrawPageReqVO reqVO);

    PageResult<FinanceAccountWithdrawExtDO> withdrawPage(LoginUser user, FinanceAccountWithdrawPageReqVO reqVO);

    List<FinanceAccountWithdrawExcelVO> exportAccountWithdrawExcel(FinanceAccountWithdrawPageReqVO reqVO);

    void review(LoginUser reviewer, AppFinanceAccountWithdrawReviewReqVO reqVO);

    FinanceAccountWithdrawPageResult getWithdrawSummary(FinanceAccountWithdrawPageReqVO reqVO);

    FinanceAccountWithdrawHeaderResult withdrawSubmitHeader();

    void withdrawConfirm(LoginUser user, FinanceWithdrawConfirmReqVO reqVO);

    FinanceAccountWithdrawApprovalDetails getById(Long id);

    void approvalResult(BpmProcessInstanceResultEvent event);

    void updateMemberUser(Long userId, String userName, String mobile, Long oldUserId);
}
